//------------------------------------------------------------------------------
// <copyright file="RpcHooks.h" company="Microsoft">
//     Copyright (c) Microsoft Corporation.  All rights reserved.
// </copyright>
//------------------------------------------------------------------------------

#pragma once

#include "RpcArchive.h"
#include "RpcBinaryData.h"
#include "RpcServer.h"

namespace Microsoft { namespace Internal { namespace GamesTest { namespace Rpc { namespace Server { namespace TestHooks
{
	void Initialize(int port);
	HRESULT ProcessPendingRequests();

	RpcHookCode OutputNoInput(RpcArchive& input, RpcArchive& output);
	RpcHookCode InputNoOutput(RpcArchive& input, RpcArchive& output);
	RpcHookCode InputOutput(RpcArchive& input, RpcArchive& output);
	RpcHookCode NoInputNoOutput(RpcArchive& input, RpcArchive& output);
	RpcHookCode MultiInputMultiOutput(RpcArchive& input, RpcArchive& output);
	RpcHookCode HookTimesOut(RpcArchive& input, RpcArchive& output);
	RpcHookCode HookWaitTenSeconds(RpcArchive& input, RpcArchive& output);
	RpcHookCode ReturnLargeNumberOfValues(RpcArchive& input, RpcArchive& output);
	RpcHookCode ReturnErrorCode(RpcArchive& input, RpcArchive& output);
	RpcHookCode SimultaneousHookCalls(RpcArchive& input, RpcArchive& output);
	RpcHookCode LargeNumberOfInputValues(RpcArchive& input, RpcArchive& output);
	RpcHookCode StopTheServer(RpcArchive& input, RpcArchive& output);
	RpcHookCode InputOutputSubtraction(RpcArchive& input, RpcArchive& output);
	RpcHookCode EchoStrings(RpcArchive& input, RpcArchive& output);
	RpcHookCode RetrieveMissingRpcArchiveField(RpcArchive& input, RpcArchive& output);
	RpcHookCode StringBufferIsTooSmall(RpcArchive& input, RpcArchive& output);
	RpcHookCode RpcArchiveValueIsNull(RpcArchive& input, RpcArchive& output);
	RpcHookCode CallProcessPendingRequestsOnceOnServer3 (RpcArchive& input, RpcArchive& output);
	RpcHookCode HookOrderIncrementNoOutput(RpcArchive& input, RpcArchive& output);
	RpcHookCode GetHookOrderCounter(RpcArchive& input, RpcArchive& output);
	RpcHookCode InputOutputIntCollection(RpcArchive& input, RpcArchive& output);
	RpcHookCode InputOutputInt64Collection(RpcArchive& input, RpcArchive& output);
	RpcHookCode InputOutputFloatCollection(RpcArchive& input, RpcArchive& output);
	RpcHookCode InputOutputStringCollection(RpcArchive& input, RpcArchive& output);
	RpcHookCode InputOutputIntCollectionAndIntNumber(RpcArchive& input, RpcArchive& output);
	RpcHookCode InputOutputMultipleCollections(RpcArchive& input, RpcArchive& output);
	RpcHookCode TriggerEvent(RpcArchive& eventName, RpcArchive& eventParameter);
	RpcHookCode AddArchiveToArchive(RpcArchive& input, RpcArchive& output);
	RpcHookCode AddArchiveToArchiveWithIntColl(RpcArchive& input, RpcArchive& output);
	RpcHookCode AddArchiveToArchiveWithStringColl(RpcArchive& input, RpcArchive& output);
	RpcHookCode AddArchiveToArchiveWithInt64Coll(RpcArchive& input, RpcArchive& output);
	RpcHookCode InputOutputArchiveCollectionToArchive(RpcArchive& input, RpcArchive& output);
	RpcHookCode InputOutputArchiveCollectionToArchiveCollections(RpcArchive& input, RpcArchive& output);
	RpcHookCode InputRpcArchiveToAnotherRpcArchiveForLoad(RpcArchive& input, RpcArchive& output);
	RpcHookCode InputRpcArchiveToAnotherRpcArchiveCollectionForLoad(RpcArchive& input, RpcArchive& output);
	RpcHookCode InputOutputMultipleCollectionsForRpcArchive(RpcArchive& input, RpcArchive& output);
	RpcHookCode ThrowException(RpcArchive& input, RpcArchive& output);
	RpcHookCode AddBinaryDataToArchive(RpcArchive& input, RpcArchive& output);
	RpcHookCode AddBinaryDataCollectionToArchive(RpcArchive& input, RpcArchive& output);
	RpcHookCode NoInputBinaryDataOutput(RpcArchive& input, RpcArchive& output);
	RpcHookCode EchoBinary(RpcArchive& input, RpcArchive& output);
	RpcHookCode StartServerWithQueueSize(RpcArchive& input, RpcArchive& output);
	RpcHookCode StopServerWithQueueSize(RpcArchive& input, RpcArchive& output);
	RpcHookCode RunServerWithQueueSize(RpcArchive& input, RpcArchive& output);
}}}}}}
